package 蓝桥杯.第十四届蓝桥杯大赛软件赛省赛Java大学B组;

import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;

/**
 * @Title: 蜗牛
 * @Author 贾金博
 * @Package 蓝桥杯.第十四届蓝桥杯大赛软件赛省赛Java大学B组
 * @Date 2024/4/9 19:48
 * @description: dp问题
 */
public class 蜗牛 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        int[] x = new int[n]; // x轴的坐标
        int[] a = new int[n - 1];
        int[] b = new int[n];
        Map<Integer, Double> mp = new HashMap<>();
        Map<Integer, Double> mp2 = new HashMap<>(); // 这个是不下来的

        for (int i = 0; i < n; i++) {
            x[i] = sc.nextInt(); // 竹竿的坐标
            mp.put(x[i], 1e19);
        }
        for (int i = 0; i < (n - 1); i++) {
            a[i] = sc.nextInt();
            b[i + 1] = sc.nextInt(); // 跳到后面杆子的长度
        }

        mp.put(0, 0.0);
        double pp = Math.min(x[0] * 1.0, a[0] / 0.7 + b[1] / 1.3 );

        mp.put(x[0], pp);
        mp2.put(x[0], a[0] * 1.0); // 上到这个杆子上面


        for(int i = 1; i < n; ++ i ) {
            double p = mp.get(x[i]);
            double p2 = mp.get(x[i - 1]);
            p = Math.min(p, Math.abs(x[i] - x[i - 1]) + p2); // 直接过来
            //先上去 在下去
            p = Math.min(p, a[i - 1] / 0.7 + b[i] / 1.3 + p2); // 先上去在下来
            System.out.println("x[i - 1] = " + x[i - 1]);
            double f = mp2.get(x[i - 1]);
            double p3 = f + x[i - 1] / 1.3; // 下来了
            //还有一种情况就是 上去不下来 最后在下来
            mp.put(x[i], Math.min(p3, p));
            //更新
            if(a[i] > b[i]) {
                mp2.put(x[i], mp2.get(x[i - 1] + (a[i] - b[i]) * 0.7)); // 上去
            } else {
                mp2.put(x[i], mp2.get(x[i - 1] + (b[i] - a[i])) * 1.3); // 下去
            }
           // System.out.println("x[i] = " + x[i]);

        }

        double ret2 = mp.get(x[n - 1]);
        System.out.printf("%.2f", ret2);
    }
}
/**
 * 3
 * 1 10 11
 * 1 1
 * 2 1
 */
